上集我們介紹到 Enum
基礎用法,今天將來講解其它用法。
字串 enum
其實和它字面上的意思一樣,簡單來說就是以字串來賦值。
enum Direction {
Up = "UP",
Down = "DOWN",
Left = "LEFT",
Right = "RIGHT",
}
console.log(Direction["Up"]) // UP
console.log(Direction["UP"]) // 噴錯
要注意的有兩點:
enum Direction {
Up = "UP",
Down = "DOWN",
Left = "LEFT",
Right = "RIGHT",
Cy
}
enum
沒有反向映射。溫馨小提醒:如果兩個元素擁有相同的值,TypeScript 是不會噴錯的。
有時候同一個 enum
裡面,可能需要不只是一種 type
,這樣是可行的嗎? 答案是肯定的,所以這裡我們要來介紹 Heterogeneous enum
,這就是複合式的 enum
。
enum Somethings {
Cy = "engineer",
Age = 28,
gender,
}
console.log(Somethings["Cy"]) // engineer
console.log(Somethings[28]) // Age
console.log(Somethings["gender"]) // 29
溫馨小提醒:雖然可以這樣,但我們可以思考一下為什麼官方會建議慎用。
接下來,如果我們希望元素都可以是常數,我們可以使用 const enum
,看到名字大概可以猜得出來,我們是要用 const
來定義。
常數列舉和普通列舉不一樣的地方:
const enum Fruit {
Apple = 0,
Banana = 1,
Orange = 2,
Grape = 3
}
let fruit = [
Fruit.Apple,
Fruit.Banana,
Fruit.Orange,
Fruit.Grape
];
編譯後
var snacks = [
0 /* Apple */,
1 /* Banana */,
2 /* Orange */,
3 /* Other */
];
enum Fruit {
Apple = 0,
Banana = 1,
Orange = 2,
Grape = 3
}
let fruit = [
Fruit.Apple,
Fruit.Banana,
Fruit.Orange,
Fruit.Grape
];
編譯後
var Fruit;
(function (Fruit) {
Fruit[Fruit["Apple"] = 0] = "Apple";
Fruit[Fruit["Banana"] = 1] = "Banana";
Fruit[Fruit["Orange"] = 2] = "Orange";
Fruit[Fruit["Grape"] = 3] = "Grape";
})(Fruit || (Fruit = {}));
var fruit = [
Fruit.Apple,
Fruit.Banana,
Fruit.Orange,
Fruit.Grape
];
有什麼差異呢?
外部列舉是使用 declare enum
來定義。
declare enum Directions {
Up,
Down,
Left,
Right
}
let directions = [Directions.Up, Directions.Down, Directions.Left, Directions.Right];
經過編譯後,會消失。
var directions = [Directions.Up, Directions.Down, Directions.Left, Directions.Right];
這兩天和大家一起來認識了 enum
,不知道大家有想要開始使用 enum
來讓自己的程式碼更加堅固安全了嗎?
明天將和大家一起來看 明文型別 (Literal Types)。